2023/12/235911字符
事件
<div style="width:150px;height:150px;background-color:#f00"></div>
<script>
var div = document.getElementsByTagName('div')[0];
</script>
绑定事件 解除清除事件
// 1.
div.onclick = function () { // 只可绑定一个事件
test();
div.onclick = null; // 解除绑定事件
}
// 2.
div.addEventListener('click', test, false); // 可绑定多个事件,并且按绑定事件顺序执行(IE9 以下不兼容)
div.removeEventListener('click', test, false); // 清除绑定事件
div.attachEvent('onclick', test); // IE 独有 一个事件可绑定多个处理函数
div.detachEvent('onclick', test); // 清除绑定事件
function test () {
console.log('a');
}
attachEvent 方法不能用 this 指向自己,this 会指向 window
使用 addEventListener(); 给每个 li 绑定一个 click 事件,并输出他们的顺序
<ul><li>a</li><li>b</li><li>c</li></ul>
var liCal = document.getElementsByTagName('li');
for(var i = 0; i < liCal.length; i ++){
(function(i){
liCal.addEventListener('click', function(){
console.log(i);
}, false)
})(i)
}
封装一个兼容性 addEvent(elem, type, handle) 方法
function addEvent(elem, type, handle){
if(elem.addEventListener){
elem.addEventListener(type, handle, false);
}else if(elem.attachEvent){
elem.attachEvent('on' = type, function(){})
}else{
elem['on', type] = handle;
}
}
常用事件
- onclick :鼠标单击事件
- ondblclick :鼠标双击事件
- onmousedown :鼠标按下事件 onmouseenter (h5 新规范)
- onmouseup :鼠标释放事件 onmouseout (h5 新规范)
- onfocus :元素获得焦点
- onblur :元素失去焦点 onchange
- onsubmit :提交按钮被点击
- onreset :重置事件
- onselect :文本被选定
- onload :页面图像被完成加载
- onunload :用户退出页面
- onerror :占位
- onmouseout :移出对象
- onmousemove :在对象上移动
- onmouseover :移过对象
- onscroll :鼠标滚轮事件
键盘类事件
- onkeyprsee :单击事件 只能监测到字符类按键(通过 asc 码)
- onkeydown :按下事件 可监测到所有键盘类事件
- onkeyup :释放事件
document.onkeypress = function(){
console.log('keypress');
}
document.onkeydown = function(){
console.log('keydown');
}
document.onkeyup = function(){
console.log('keyup');
}
// onkeydown > onkeypress > onkeyup
document.onkeydown = function(e){
console.log(String.fromCharCode(e.charCode)); // String.fromCharCode() 方法将 unicode 编码转化为字符串
} // unicode 编码包含 asc 码
触发事件
<input type="text">
var input = document.getElementsByTagName('input')[0];
input.oninput = function(e){ // 得到焦点事件 但凡有变化都会触发事件
console.log(this.value);
}
var input = document.getElementsByTagName('input')[0];
input.onchange = function(e){ // 鼠标聚焦和失去焦点两个状态发生改变触发事件
console.log(this.value);
}
onfocus onblur
<input type="text" value="请输入用户名" style="color:#999" onfocus="if(this.value=='请输入用户名'){this.value='';this.style.color='#424242'}" onblur="if(this.value==''){this.value='请输入用户名';this.style.color='#999'}">
onscroll
document.onscroll = function(){
console.log('X:' + window.pageXOffset + 'Y:' + window.pageYOffset);
}
// 判断鼠标左、中、右键
document.onmousedown = function(e){
if(e.button == 0){
console.log('left');
}else if(e.button == 1){
console.log('center');
}else if(e.button == 2){
console.log('right');
}
}
- 取消事件的默认动作:preventDefault()
封装 drag() 方法,实现鼠标拖拽方法
var div = document.getElementsByTagName('div')[0];
// on
function drag(elem) {
elem.onmousedown = function (e) {
var e = e || window.event;
var disX = e.clientX - elem.offsetLeft,
disY = e.clientY - elem.offsetTop;
document.onmousemove = function (e) {
elem.style.left = e.clientX - disX + "px";
elem.style.top = e.clientY - disY + "px";
}
}
document.onmouseup = function (e) {
this.onmousemove = null;
}
}
drag(div);
// addEventListener()
function drag (elem) {
elem.addEventListener('mousedown', function (e) {
var e = e || window.event;
var disX = e.clientX - elem.offsetLeft,
disY = e.clientY - elem.offsetTop;
document.addEventListener('mousemove', mouseMove, false);
document.addEventListener('mouseup', function (e) {
document.removeEventListener('mousemove', mouseMove, false);
}, false);
function mouseMove (e) {
elem.style.left = e.clientX - disX + "px";
elem.style.top = e.clientY - disY + "px";
}
}, false);
}
drag(div);
div.setCapture(); IE 独有 将 div 的事件硬获取,捕获到自己身上 div.releaseCapture(); 释放 div 获取,捕获的事件
鼠标按下时间过长触发事件
var firstTime = 0,
lastTime = 0;
var key = false; // 加锁
document.onmousedown = function () {
firstTime = new Date().getTime();
}
document.onmouseup = function () {
lastTime = new Date().getTime();
if (lastTime - firstTime < 300) {
key = true;
}
}
document.onclick = function () {
if (key) {
console.log('click');
key = false;
}
}